// 规则：https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin
module.exports = {
  extends: 'plugin:@typescript-eslint/recommended',
  rules: {
    /**
     * 接口名称必须已 I 开头
     */
    '@typescript-eslint/interface-name-prefix': 0,

    /**
     * 禁止使用 namespace 来定义命名空间
     * @category TypeScript
     * @reason 使用 es6 引入模块，才是更标准的方式。
     * 允许使用 declare namespace ... {} 来定义外部命名空间
     */
    '@typescript-eslint/no-namespace': [
      1,
      {
        allowDeclarations: true,
        allowDefinitionFiles: true,
      },
    ],

    //  必须定义函数返回类型
    '@typescript-eslint/explicit-function-return-type': 0,

    // 必须使用驼峰
    '@typescript-eslint/camelcase': 0,

    // 使用变量必须在之后
    '@typescript-eslint/no-use-before-define': 0,

    // 是否可以使用any
    '@typescript-eslint/no-explicit-any': 0,

    // class 成员方法是否添加私有 公有
    '@typescript-eslint/explicit-member-accessibility': 0,

    // 禁止使用require语句，导入语句除外
    '@typescript-eslint/no-var-requires': 0,

    // 三斜杠允许使用 path、types、lib 属性
    '@typescript-eslint/triple-slash-reference': [2, { path: 'always', types: 'always', lib: 'always' }],
    '@typescript-eslint/no-empty-function': 1,
    '@typescript-eslint/no-empty-interface': 1,
    '@typescript-eslint/ban-types': 1,
  },
};
